package main

import "fmt"

func main() {
	slice1 := []int{1, 2, 3, 4, 5, 6, 7, 8}
	fmt.Println("len:", len(slice1), "cap:", cap(slice1))
	fmt.Println(slice1)

	slice2 := slice1[:]
	fmt.Println("len:", len(slice2), "cap:", cap(slice2))
	fmt.Println(slice2)

	//截取切片 [a:b:c]
	slice3 := slice1[2:5]
	fmt.Println(slice3)

	//切片和原数组关系
	array1 := [10]int{1, 2, 3, 4, 5, 6, 7, 8}
	array1_slice1 := array1[2:5]
	fmt.Println("array1_slice1 init:", array1_slice1)
	array1_slice1[0] = 9
	fmt.Println("array1_slice1", array1_slice1)
	fmt.Println("原数组", array1)

	fmt.Println("----------------")
	array1_slice2 := array1_slice1[1:3]
	fmt.Println("array1_slice2 init:", array1_slice2)
	array1_slice2[0] = 8
	fmt.Println("array1_slice2", array1_slice2)
	fmt.Println("原数组", array1)

	//切片基于数组创建,切片里面的某个元素修改,原数组非扩容部分也是被修改的
	//扩容部分不会影响原数组
	array1_slice2 = append(array1_slice2, 11, 22, 33)
	fmt.Println("array1_slice2", array1_slice2)
	fmt.Println("array1_slice2 cap:", cap(array1_slice2))

	fmt.Println("原数组", array1)
	array1_slice2 = append(array1_slice2, 11, 22, 33, 44, 55, 66, 77)

	fmt.Println("array1_slice2", array1_slice2)
	fmt.Println("array1_slice2 cap:", cap(array1_slice2))

	fmt.Println("原数组", array1)
	/**
		array1_slice2 cap: 7
		原数组 [1 2 9 8 5 11 22 33 0 0]
		array1_slice2 [8 5 11 22 33 11 22 33 44 55 66 77]
		array1_slice2 cap: 14
	 */
	//slice超过默认容量,以原容量2倍扩容
	fmt.Println("________________________copy")
	len_slice3 := len(slice3)

	slice4 := make([]int, len_slice3)

	copy(slice4, slice3)
	fmt.Println(slice3)
	fmt.Println(slice4)
}
